Do not use regexps to parse simple version strings. This saves 5-10ms on a JellyBean Samsung Nexus S for the check to see whether the VM supports multidex natively. On a newer Samsung S7 phone it saves 0.5 ms. Test: manually tested on old and new devices. Bug: 74259172 Change-Id: Ic05645deb5b4b990d07c726aa0fdd5f0cfa5884b
diff --git a/library/src/androidx/multidex/MultiDex.java b/library/src/androidx/multidex/MultiDex.java index 30cb886..c038709 100644 --- a/library/src/androidx/multidex/MultiDex.java +++ b/library/src/androidx/multidex/MultiDex.java
@@ -38,8 +38,7 @@ import java.util.List; import java.util.ListIterator; import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.StringTokenizer; import java.util.zip.ZipFile; /** @@ -334,11 +333,13 @@ static boolean isVMMultidexCapable(String versionString) { boolean isMultidexCapable = false; if (versionString != null) { - Matcher matcher = Pattern.compile("(\\d+)\\.(\\d+)(\\.\\d+)?").matcher(versionString); - if (matcher.matches()) { + StringTokenizer tokenizer = new StringTokenizer(versionString, "."); + String majorToken = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null; + String minorToken = tokenizer.hasMoreTokens() ? tokenizer.nextToken() : null; + if (majorToken != null && minorToken != null) { try { - int major = Integer.parseInt(matcher.group(1)); - int minor = Integer.parseInt(matcher.group(2)); + int major = Integer.parseInt(majorToken); + int minor = Integer.parseInt(minorToken); isMultidexCapable = (major > VM_WITH_MULTIDEX_VERSION_MAJOR) || ((major == VM_WITH_MULTIDEX_VERSION_MAJOR) && (minor >= VM_WITH_MULTIDEX_VERSION_MINOR)); diff --git a/version.gradle b/version.gradle index 85e088f..dd05783 100644 --- a/version.gradle +++ b/version.gradle
@@ -14,4 +14,4 @@ * limitations under the License. */ -ext.multidexVersion = '2.0.0' +ext.multidexVersion = '2.0.1'